﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LM.InterfacesFabricas.DTOs;
using LM.InterfacesFabricas.Fabricas;
using LM.InterfacesFabricas.Interfaces.Servicos;
using LM.Tela.Desktop.Properties;

namespace LM.Tela.Desktop.Formularios
{
    public partial class frmCadastrarTelefone : Form
    {
        public IList<DtoTelefone> ListTelefones { get; set; }
        public int RowIndex { get; set; }

        public frmCadastrarTelefone(int Codigo)
        {
            InitializeComponent();
            ListTelefones = new List<DtoTelefone>();
            dpdTipoTelefone.SelectedIndex = 0;
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!EmEdicao())
            {
                this.ExibaInconsistencia("Telefone não selecionada para edição.");
            }
            else
            {
                foreach (var c in ListTelefones.Where(c => c.Codigo == int.Parse(txtCodigo.Text)))
                {
                    ListTelefones.Remove(c);
                }

                PrepareTelaParaNovoRegistro();
                CarregueItensJaCadastrados();
            }
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            Salvar();
            CarregueItensJaCadastrados();
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private void btnCancelar_Click( object sender, EventArgs e )
        {
            var result = MessageBox.Show(Resources.messageBox_dialog_exit, Resources.messageBox_title_Confirmação, MessageBoxButtons.YesNo,MessageBoxIcon.Information);
            if (result == DialogResult.Yes)
            {
                this.Close();
            }   
        }

        private void PrepareTelaParaNovoRegistro()
        {
            LimpeCamposEdicao();
            CarregueItensJaCadastrados();
            txtCodigo.Enabled = true;
            txtCodigo.Focus();
            dpdTipoTelefone.SelectedIndex = 0;
        }

        private bool EmEdicao()
        {
            return !string.IsNullOrWhiteSpace(txtCodigo.Text) && txtCodigo.Enabled == false;
        }

        private void CarregueItensJaCadastrados()
        {
            grdTelCadastrado.DataSource = new List<DtoTelefone>();
            grdTelCadastrado.DataSource = ListTelefones;
        }

        private void LimpeCamposEdicao()
        {
            txtCodigo.Text = string.Empty;
            txtDdd.Text = string.Empty;
            txtNumero.Text = string.Empty;
            dpdTipoTelefone.SelectedIndex = 0;
        }

        private void Salvar()
        {
            DtoTelefone d = new DtoTelefone();

            int codigo;
            int.TryParse(txtCodigo.Text, out codigo);
            var telefone = new DtoTelefone { Codigo = codigo, 
                                             Ddd = Convert.ToInt32(txtDdd.Text),
                                             Numero = Convert.ToInt32(txtNumero.Text), 
                                             Tipo = dpdTipoTelefone.SelectedIndex
                                             };

            var servicoDeTelefone = FabricaGenerica.Crie<IServicoDeTelefone>();

            if (!EmEdicao())
            {
                d = servicoDeTelefone.Valide(telefone);
                Cadastre(d);
            }
            else
                Atualize(telefone);

            PrepareTelaParaNovoRegistro();
        }

        private void Cadastre(DtoTelefone telefone)
        {
            ListTelefones.Add(telefone);
        }

        private void Atualize(DtoTelefone telefone)
        {
            ListTelefones[RowIndex] = telefone;
        }

        private void grdTelCadastrado_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            RowIndex = e.RowIndex;
            if (e.RowIndex >= 0)
            {
                var telefone = ((IList<DtoTelefone>)grdTelCadastrado.DataSource)[e.RowIndex];

                txtCodigo.Text = telefone.Codigo.ToString(CultureInfo.InvariantCulture);
                txtCodigo.Enabled = false;
                txtDdd.Text = telefone.Ddd.ToString();
                txtNumero.Text = telefone.Numero.ToString();
                dpdTipoTelefone.SelectedIndex = telefone.Tipo;
            }
        }

        private void txtCodigo_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
